home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / t_os / oricon / source / his.asm < prev    next >
Encoding:
Assembly Source File  |  1991-10-19  |  4.6 KB  |  355 lines

  1. ;
  2. ;    Command Line History Input TSR
  3. ;
  4. ;    1991.07.12    make by Ken
  5. ;
  6.         .286
  7. _TEXT        SEGMENT  WORD PUBLIC 'CODE'
  8. _TEXT        ENDS
  9. _DATA        SEGMENT  WORD PUBLIC 'DATA'
  10. _DATA        ENDS
  11. CONST        SEGMENT  WORD PUBLIC 'CONST'
  12. CONST        ENDS
  13. _BSS        SEGMENT  WORD PUBLIC 'BSS'
  14. _BSS        ENDS
  15.  
  16. DGROUP        GROUP    _TEXT, CONST, _BSS, _DATA
  17.  
  18.         ASSUME CS: DGROUP, DS: DGROUP, SS: DGROUP
  19.  
  20. extrn        _input:near
  21. extrn        _dta_bak:dword
  22. extrn        _dta:near
  23.  
  24. _DATA        segment
  25. UnGetBuf    db    0FFh
  26. _DATA        ends
  27.  
  28. _TEXT        segment
  29.  
  30. Vect_21        dd    far
  31.  
  32.         public    _PUTC
  33. _PUTC        proc    near
  34.         push    bp
  35.         mov    bp,sp
  36.         mov    dl,[bp+4]
  37.         mov    ah,02h
  38.         int    21h
  39.         pop    bp
  40.         ret
  41. _PUTC        endp
  42.  
  43.         public    _PUTS
  44. _PUTS        proc    near
  45.         push    bp
  46.         mov    bp,sp
  47.         push    bx
  48.         push    dx
  49.  
  50.         mov    ah,02h
  51.         mov    bx,[bp+4]
  52.         mov    cx,[bp+6]
  53.         cmp    cx,0
  54.         jle    _PUTS_5
  55.  
  56. _PUTS_1:    mov    dl,[bx]
  57.         inc    bx
  58.         cmp    dl,0
  59.         je    _PUTS_5
  60.         cmp    dl,0Ah
  61.         jne    _PUTS_2
  62.         mov    dl,0Dh
  63.         jmp    _PUTS_3
  64.  
  65. _PUTS_2:    cmp    dl,20h
  66.         jnb    _PUTS_3
  67.         mov    dl,'.'
  68.  
  69. _PUTS_3:    int    21h
  70.         loop    _PUTS_1
  71.  
  72. _PUTS_5:    pop    dx
  73.         pop    bx
  74.         pop    bp
  75.         ret
  76. _PUTS        endp
  77.  
  78.         public    _BEEP
  79. _BEEP        proc    near
  80.         push    dx
  81.         mov    ah,02h
  82.         mov    dl,07h
  83.         int    21h
  84.         pop    dx
  85.         ret
  86. _BEEP        endp
  87.  
  88.         public    _FLUSH
  89. _FLUSH        proc    near
  90.         ret
  91. _FLUSH        endp
  92.  
  93.         public    _BAKSPC
  94. _BAKSPC        proc    near
  95.         push    bp
  96.         mov    bp,sp
  97.         push    dx
  98.  
  99.         mov    cx,[bp+4]
  100.         cmp    cx,0
  101.         jle    _BAKSPC_2
  102.  
  103.         mov    ah,02h
  104.         mov    dl,08h
  105.  
  106. _BAKSPC_1:    int    21h
  107.         loop    _BAKSPC_1
  108.  
  109. _BAKSPC_2:    pop    dx
  110.         pop    bp
  111.         ret
  112. _BAKSPC        endp
  113.  
  114.         public    _REPCHR
  115. _REPCHR        proc    near
  116.         push    bp
  117.         mov    bp,sp
  118.         push    dx
  119.  
  120.         mov    cx,[bp+6]
  121.         cmp    cx,0
  122.         jle    _REPCHR_2
  123.  
  124.         mov    ah,02h
  125.         mov    dl,[bp+4]
  126.  
  127. _REPCHR_1:    int    21h
  128.         loop    _REPCHR_1
  129.  
  130. _REPCHR_2:    pop    dx
  131.         pop    bp
  132.         ret
  133. _REPCHR        endp
  134.  
  135.         public    _GETCH
  136. _GETCH        proc    near
  137.         mov    al,UnGetBuf
  138.         cmp    al,0FFh
  139.         jne    GetCh_1            ; UnGetBuf TRUE ?
  140.         mov    ah,08h            ; Non Echo Get Char
  141.         int    21h
  142. GetCh_1:    mov    UnGetBuf,0FFh
  143.         sub    ah,ah
  144.         ret
  145. _GETCH        endp
  146.  
  147.         public    _UNGETCH
  148. _UNGETCH    proc    near
  149.         push    bp
  150.         mov    bp,sp
  151.         mov    al,[bp+4]
  152.         mov    UnGetBuf,al
  153.         pop    bp
  154.         ret
  155. _UNGETCH    endp
  156.  
  157.         public    _tolow
  158. _tolow        proc    near
  159.         push    bp
  160.         mov    bp,sp
  161.         mov    ax,[bp+4]
  162.         sub    ah,ah
  163.         cmp    al,'A'
  164.         jb    _tolow_1
  165.         cmp    al,'Z'
  166.         ja    _tolow_1
  167.         or    al,20h
  168. _tolow_1:    pop    bp
  169.         ret
  170. _tolow        endp
  171.  
  172.         public    _strlow
  173. _strlow        proc    near
  174.         push    bp
  175.         mov    bp,sp
  176.         push    bx
  177.  
  178.         mov    bx,[bp+4]
  179.  
  180. _strlow_1:    mov    al,[bx]
  181.         cmp    al,0
  182.         je    _strlow_3
  183.         cmp    al,'A'
  184.         jb    _strlow_2
  185.         cmp    al,'Z'
  186.         ja    _strlow_2
  187.         or    al,20h
  188. _strlow_2:    mov    [bx],al
  189.         inc    bx
  190.         jmp    _strlow_1
  191.  
  192. _strlow_3:    pop    bx
  193.         pop    bp
  194.         ret
  195. _strlow        endp
  196.  
  197.         public    _DTA_init    
  198. _DTA_init    proc    near
  199.         push    es
  200.         push    bx
  201.  
  202.         mov    ah,2Fh
  203.         int    21h
  204.         mov    word ptr [_dta_bak],bx
  205.         mov    word ptr [_dta_bak+2],es
  206.  
  207.         mov    ah,1Ah
  208.         mov    dx,offset DGROUP:_dta
  209.         int    21h
  210.  
  211.         pop    bx
  212.         pop    es
  213.         ret
  214. _DTA_init    endp
  215.  
  216.         public    _DTA_end
  217. _DTA_end    proc    near
  218.         push    ds
  219.  
  220.         mov    ah,1Ah
  221.         mov    dx,word ptr [_dta_bak]
  222.         mov    ax,word ptr [_dta_bak+2]
  223.         mov    ds,ax
  224.         int    21h
  225.  
  226.         pop    ds
  227.         ret
  228. _DTA_end    endp
  229.  
  230.         public    _farst_call
  231. _farst_call    proc    near
  232.         push    bp
  233.         mov    bp,sp
  234.  
  235.         mov    ah,4Eh
  236.         mov    cx,21h
  237.         mov    dx,[bp+4]
  238.         int    21h
  239.         mov    ax,1
  240.         jnc    _farst_1
  241.         sub    ax,ax
  242.  
  243. _farst_1:    pop    bp
  244.         ret
  245. _farst_call    endp
  246.  
  247.         public    _next_call
  248. _next_call    proc    near
  249.         mov    ah,4Fh
  250.         int    21h
  251.         mov    ax,1
  252.         jnc    _next_1
  253.         sub    ax,ax
  254. _next_1:    ret
  255. _next_call    endp
  256.  
  257. ;*******************************************************************
  258.  
  259. His_Go        proc    near
  260.         pusha
  261.         push    ds
  262.         push    es
  263.  
  264.         sti
  265.         push    ds
  266.         push    dx
  267.  
  268.         mov    bx,dx
  269.         mov    al,ds:[bx]
  270.         sub    ah,ah
  271.  
  272.         push    cs
  273.         pop    ds
  274.  
  275.         push    ax
  276.         call    _input
  277.         add    sp,2
  278.  
  279.         mov    si,ax
  280.         pop    di
  281.         pop    es
  282.  
  283.         mov    bx,di
  284.         add    di,2
  285.         sub    ah,ah
  286.  
  287. His_Go_1:    lodsb
  288.         or    al,al
  289.         je    His_Go_3
  290.         cmp    al,0Ah
  291.         jne    His_Go_2
  292.         mov    al,0Dh
  293.         stosb
  294.         jmp    His_Go_3
  295.  
  296. His_Go_2:    cmp    ah,es:[bx]
  297.         jnb    His_Go_3
  298.         stosb
  299.         inc    ah
  300.         jmp    short His_Go_1
  301.  
  302. His_Go_3:    mov    es:[bx+1],ah
  303.  
  304.         pop    es
  305.         pop    ds
  306.         popa
  307.         iret
  308. His_Go        endp
  309.  
  310. Trap_21        proc    near
  311.         cmp    ah,0Ah            ; Dos Line Input Call
  312.         je    His_Go
  313.         jmp    cs:[Vect_21]
  314. Trap_21        endp
  315.  
  316. ;*******************************************************************
  317.  
  318.         public    His_init
  319. His_init    proc    near
  320.         push    ds
  321.  
  322.         mov    ax,3521h        ; Get 21h Int Vect
  323.         int    21h
  324.         mov    word ptr cs:[Vect_21],bx
  325.         mov    ax,es
  326.         mov    word ptr cs:[Vect_21+2],ax
  327.  
  328.         push    cs
  329.         pop    ds
  330.         mov    dx,offset DGROUP:Trap_21
  331.         mov    ax,2521h        ; Set Now Vect
  332.         int    21h
  333.  
  334.         pop    ds
  335.         ret
  336.  
  337. His_init    endp
  338.  
  339.         public    His_end
  340. His_end        proc    near
  341.  
  342.         push    ds
  343.  
  344.         lds    dx,cs:[Vect_21]
  345.         mov    ax,2521h        ; Set 21h int Vect
  346.         int    21h
  347.  
  348.         pop    ds
  349.         ret
  350.  
  351. His_end        endp
  352.  
  353. _TEXT        ends
  354.         end
  355.